# 旋转编码器
# sw：按钮，dt/clk旋转

from machine import Pin

# 定义编码器的引脚
clk_pin = Pin(21, Pin.IN)  # CLK引脚连接到GPIO 5
dt_pin = Pin(22, Pin.IN)  # DT引脚连接到GPIO 4
sw_pin = Pin(23, Pin.IN)

# 初始化旋转方向和步数
rotation_direction = 0
step_count = 0


# 定义一个函数来处理编码器的输入
def encoder_callback(pin):
    global rotation_direction, step_count
    # 检查DT和CLK引脚的状态
    if dt_pin.value() == 0 and clk_pin.value() == 1:
        # 顺时针旋转
        rotation_direction = 1
    elif dt_pin.value() == 1 and clk_pin.value() == 1:
        # 逆时针旋转
        rotation_direction = -1
        # 当CLK引脚从低电平变为高电平时，增加步数
    if clk_pin.value() == 1:
        step_count += rotation_direction
        print(f"旋转方向: {rotation_direction}, 步数: {step_count}")

    # 配置CLK引脚的中断，当引脚状态变化时调用encoder_callback函数


def sw_callback(pin):
    print("sw被按下了", sw_pin.value())


clk_pin.irq(trigger=Pin.IRQ_RISING, handler=encoder_callback)
sw_pin.irq(trigger=Pin.IRQ_FALLING, handler=sw_callback)

# 主循环，等待中断触发
try:
    while True:
        pass  # 什么也不做，等待中断
except KeyboardInterrupt:
    print("程序被中断")
